package com.ssy.lingxi.order.service.base;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.entity.OrderDO;
import com.ssy.lingxi.order.model.bo.VendorBO;
import com.ssy.lingxi.order.model.dto.OrderMemberDTO;
import com.ssy.lingxi.order.model.dto.OrderSalesDTO;

import java.util.List;

/**
 * 基础订单权限相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2022-01-06
 */
public interface IBaseOrderAuthService {
    /**
     * 更新供应商用户Id字段，要在流程执行之后调用此接口，调用方要保存OrderDO
     * @param order 订单
     */
    void updateVendorUserId(OrderDO order);

    /**
     * 更新供应商用户Id字段，要在流程执行之后调用此接口，调用方要保存OrderDO
     * @param order 订单
     * @param sales 供应商业务员信息列表
     */
    void updateVendorUserId(OrderDO order, List<OrderSalesDTO> sales);

    /**
     * 更新供应商用户Id字段，要在流程执行之后调用此接口，调用方要保存OrderDO
     * @param order 订单
     * @param vendorUserId 供应商业务员用户Id
     */
    void updateVendorUserId(OrderDO order, Long vendorUserId);

    /**
     * 从会员服务查询供应商业务员Id
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId   采购会员角色Id
     * @param vendorMemberId 供应会员Id
     * @param vendorRoleId  供应会员角色Id
     * @return 供应会员业务员用户Id，如没有返回Null
     */
    Wrapper<Long> findVendorSalesUserId(Long buyerMemberId, Long buyerRoleId, Long vendorMemberId, Long vendorRoleId);

    /**
     * 从会员服务查询供应商业务员Id
     * @param buyerMemberId 采购会员Id
     * @param buyerRoleId   采购会员角色Id
     * @param vendorMemberId 供应会员Id
     * @param vendorRoleId  供应会员角色Id
     * @return 供应会员业务员用户Id，如没有返回0L
     */
    Long findVendorSales(Long buyerMemberId, Long buyerRoleId, Long vendorMemberId, Long vendorRoleId);

    /**
     * 批量查询供应商业务员用户Id
     * @param buyerMemberId 采购会员id
     * @param buyerRoleId 采购会员角色Id
     * @param vendors 供应商列表
     * @return 查询结果
     */
    Wrapper<List<OrderSalesDTO>> findVendorSales(Long buyerMemberId, Long buyerRoleId, List<VendorBO> vendors);

    /**
     * 批量查询供应商业务员用户Id
     * @param members 采购会员与供应会员列表
     * @return 查询结果
     */
    Wrapper<List<OrderSalesDTO>> findVendorSales(List<OrderMemberDTO> members);
}
